const { Controller } = require('egg');

class CommentController extends Controller {
    /**
     * 添加评论
     */
    async create() {
        // 获取参数
        const { bid, content } = this.ctx.request.body;
        console.log(bid, content);
        // 非空校验
        if (!bid || !content) {
            this.ctx.body = {
                code: 400,
                message: '缺少必须参数',
            };
            return;
        }
        // 校验评论的博客是否存在
        // 校验评论的字数限制
        // 调用 service 层，添加一个评论
        let res = await this.service.comment.create({
            bid,
            content,
            uid: this.ctx.user.id,
        });
        // 判断是否添加成功
        if (res.affectedRows !== 1) {
            this.ctx.body = {
                code: 500,
                message: '评论失败',
            };
            return;
        }
        // 发表评论成功
        this.ctx.body = {
            code: 201,
            message: '评论成功',
        };
    }

    async index() {
        // 调用 service 层，查询某个博客的评论列表
        const list = await this.service.comment.readList(this.ctx.params.bid);
        // 响应成功
        this.ctx.body = {
            code: 200,
            data: list,
            message: '获取博客的评论列表成功',
        };
    }

    /**
     * 获取当前登录用户已点赞的评论
     */
    async liked() {
        const res = await this.service.comment.liked(this.ctx.user.id);
        const arr = res.map((item) => item.cid);
        this.ctx.body = {
            code: 200,
            data: {
                likedCid: arr,
            },
            message: '获取已点赞评论列表成功',
        };
    }

    async star() {
        // 调用 service 层，修改某个评论的 star 数，在原有基础上 +1
        const { id } = this.ctx.params;
        let comment = await this.service.comment.find(id);
        if (!comment) {
            this.ctx.body = {
                code: 404,
                message: '该评论不存在',
            };
            return;
        }
        const params = { uid: this.ctx.user.id, cid: id };
        const isLiked = await this.service.comment.isLiked(params);
        // 如果点赞了，就取消点赞
        if (isLiked) {
            let res = await this.service.comment.unLike(params);
            // 判断取消点赞是否成功
            if (res.affectedRows !== 1) {
                this.ctx.body = {
                    code: 500,
                    message: '取消点赞失败',
                };
                return;
            }
            // 点赞成功
            this.ctx.body = {
                code: 201,
                message: '取消点赞成功',
            };
        } else {
            let res = await this.service.comment.like(params);
            // 判断是否点赞成功
            if (res.affectedRows !== 1) {
                this.ctx.body = {
                    code: 500,
                    message: '点赞失败',
                };
                return;
            }
            // 点赞成功
            this.ctx.body = {
                code: 201,
                message: '点赞成功',
            };
        }
    }
}

module.exports = CommentController;
